#include "updatexmlparser.h"

UpdateXmlParser::UpdateXmlParser(QObject *parent) :
    QObject(parent)
{
}


void UpdateXmlParser::setParsetFile(const QString &xmlProPath)
{
    QFile file(xmlProPath);

    if (file.exists())
    {
        this->parser(xmlProPath);
    } else {
        emit parserFinish(-1);
    }
}


UpdateInfo UpdateXmlParser::parser(const QString &xmlProPath)
{
//    qDebug() << "paht=============>>>" << xmlProPath;
    UpdateInfo updateInfo;

    updateInfo.removeFileList.clear();
    updateInfo.updateFileCount = 0;
    updateInfo.parsexmlState = (quint8)SUBCMD_UPDATEXMLSUCCESS;

    QFile file(xmlProPath);

    QString rootName = "slcd";
//    qDebug() << "fileName=====>" << rootName << xmlProPath;

    QString errMsg;
    int errLine;
    int errColumn;
    QDomDocument doc;

    if (!doc.setContent(&file, true, &errMsg, &errLine, &errColumn))
    {
//        qDebug() << "doc setContent err==>" << "errline:" << errLine << "errColum:" << errColumn << "err:" << errMsg;

        logger()->warn(tr("parser update xml err, errLine:%1, errColum:%2,"
                       "errMsg:%3\n").arg(errLine).arg(errColumn).arg(errMsg));
//        emit parserFinish(-2);
        updateInfo.parsexmlState = (quint8)SUBCMD_UPDATEXMLFROMATERR;

        return updateInfo;
    }

    QDomElement root = doc.documentElement();
    if (root.tagName() != rootName)
    {
//        qDebug() << "root err================>" << root.tagName();
        logger()->warn(tr("parser update xml err, root tagName err, err root tagName:%1, right root tagName:%2\n")
                       .arg(root.tagName()).arg(rootName));

        updateInfo.parsexmlState = (quint8)SUBCMD_UPDATEXMLROOTNANMEERR;

//        emit parserFinish(-3);
        return updateInfo;
    }


    QString version = root.attribute("version");
    int updateFileCount = root.attribute("UpdateFileCount").toInt();
    int removeFileCount = root.attribute("RemoveFileCount").toInt();
    QString updatePath = root.attribute("updatePath");

    updatePath.replace("\\", "/");
    updateInfo.version = version;
    updateInfo.removeFileCount = removeFileCount;
    updateInfo.updateFileCount = updateFileCount;
    updateInfo.updatePath = updatePath;


    QDomNode node = root.firstChild().toElement();
    while(!node.isNull())
    {
       QDomElement element = node.toElement();

       QString fileName = element.attribute("name");
//       int filelen = element.attribute("filelen").toInt();
//       QString checkSum = element.attribute("checksum");
       fileName.replace("\\", "/");

       FileDate fileDate;
       if (element.tagName() == "updateFile")
       {
          fileDate.fileName = fileName;
//          fileDate.filelen = filelen;
//          fileDate.checkSum = checkSum;
          updateInfo.updateFileList.append(fileDate);
       } else {
           updateInfo.removeFileList.append(fileName);
       }

       node = node.nextSibling();
    }

    //如果标记要更新的文件数量不对，也返回错误
    if (updateInfo.updateFileCount == 0 ||
            updateInfo.updateFileCount != updateInfo.updateFileList.count())
    {
        updateInfo.parsexmlState = SUBCMD_UPDATEFILECOUNTERR;
    }
//    qDebug() << updateInfo.publishTime << "addFileCount" << updateInfo.updateFileCount << updateInfo.removeFileCount;

//    qDebug() << updateInfo.removeFileList << updateInfo.updateFileList.at(0).fileName;

    return updateInfo;
}
